home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / rascal.arc / RASCAL.DOC < prev    next >
Text File  |  1980-01-01  |  29KB  |  901 lines

  1.  
  2.  
  3.  
  4.  
  5.                                   November 1983
  6.  
  7.         This  document  tells  how  to  use the Rascal BASIC preprocessor
  8.         program,  RASCAL.EXE, and tells how to write programs for the IBM
  9.         PC  in  the Rascal language. This manual assumes you are familiar
  10.         with MS DOS and Microsoft BASIC.
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.                               RASCAL USER'S MANUAL                              RASCAL USER'S MANUAL
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.                              Manual version:   1.05
  32.  
  33.                              Software version: 1.05
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.                                    Marty Franz
  50.  
  51.                      525 W. Walnut St., Kalamazoo, MI 49007
  52.  
  53.                                  (616) 344-1821
  54.  
  55.  
  56.  
  57.                (C) Copyright 1983 Marty Franz - All rights reserved
  58.  
  59.  
  60.  
  61.         111483105         Rascal Preprocessor User's Manual
  62.  
  63.  
  64.  
  65.         INTRODUCTION        INTRODUCTION
  66.  
  67.             RASCAL.EXE is a preprocessor program for Microsoft BASIC on
  68.         the IBM PC.  It takes a program containing special Rascal
  69.         statements and translates it into a program containing BASIC
  70.         statements.  Using Rascal helps you write more concise, better
  71.         structured BASIC programs, because the preprocessor lets you take
  72.         advantage of these features:
  73.  
  74.             - you now have the ability to write free-form, indented
  75.               statements without line numbers.
  76.  
  77.             - you can now include statements from many separate files
  78.               into a single BASIC program. This lets you write and
  79.               maintain your programs in small modules.
  80.  
  81.             - you can organize your subroutines into procedures, each
  82.               with its own alphanumeric name.
  83.  
  84.             - you can use structured programming statements similar to
  85.               those found in programming languages like Pascal and C.
  86.  
  87.             Before using RASCAL.EXE, please take the time to read these
  88.         instructions carefully.  When using it, bear in mind that this is
  89.         version 1.05 of the program, and there may be bugs in it.  If
  90.         there is, or you have suggestions on improving Rascal, please
  91.         contact me:
  92.  
  93.                  Marty Franz
  94.                  525 W. Walnut St.
  95.                  Kalamazoo, MI  49007
  96.                  (616) 344-1821
  97.  
  98.             One more thing: the program, and this manual, are copyrighted
  99.         materials.  They may be freely distributed only for private,
  100.         noncommercial use.  Please read the copyright notice on your
  101.         diskette.
  102.  
  103.  
  104.         A SAMPLE PROGRAM        A SAMPLE PROGRAM
  105.  
  106.             Before describing Rascal in too much detail, let's first look
  107.         at a typical program.  This will help you understand what
  108.         RASCAL.EXE does.  The file LC.RAS on the Rascal diskette is a
  109.         good example.  It asks for the name of a text file and counts the
  110.         number of lines in it.  You can make a listing of LC.RAS on your
  111.         printer with the PRINT program supplied on the diskette:
  112.  
  113.                  A>llist lc.ras
  114.  
  115.         (See the LLIST program instructions for more information on the
  116.         LLIST program.)
  117.  
  118.  
  119.  
  120.  
  121.                                                                          Page 2        111483105         Rascal Preprocessor User's Manual
  122.  
  123.  
  124.  
  125.             Your listing of LC.RAS should look like this:
  126.  
  127.             'Sample Rascal program to count the lines in an ASCII file.
  128.  
  129.             PROCEDURE MAIN
  130.                  ON ERROR GOTO CHECK.FOR.EOF
  131.  
  132.                  INPUT "File Name"; FILE.NAME$
  133.                  OPEN FILE.NAME$ FOR INPUT AS #1
  134.                  LINE.COUNT = 0 : DONE.SW = 0
  135.                  REPEAT
  136.                       LINE INPUT #1, L$
  137.                       LINE.COUNT = LINE.COUNT+1
  138.                  UNTIL DONE.SW = 1
  139.                  PRINT "There are";LINE.COUNT-1;"lines in ";FILE.NAME$
  140.             ENDPROC
  141.  
  142.             CHECK.FOR.EOF|
  143.                  ERROR.CODE = ERR : ERROR.LINE = ERL
  144.                  IF ERROR.CODE = 62
  145.                       DONE.SW = 1
  146.                       RESUME NEXT
  147.                  ELSE
  148.                       PRINT "BASIC error ";ERROR.CODE;"at";ERROR.LINE
  149.                       STOP 'Immediately halt program
  150.                  ENDIF
  151.             END
  152.  
  153.             This file (called a source file in this manual) was created                                ______ ____
  154.         using the RED.EXE program.  For more information about RED, see
  155.         the separate file about it on the diskette.  Don't worry at this
  156.         point about the details of each statement in the program; we'll
  157.         be covering them shortly.  For now, notice only that a Rascal
  158.         program, unlike a BASIC program, has line-number-free, neatly
  159.         indented statements, and empty lines to separate blocks of
  160.         statements. In fact, it resembles those Pascal programs you've
  161.         seen in magazines more than BASIC.  Because the program looks
  162.         more structured than BASIC, it ought to be easier to understand
  163.         and maintain.
  164.  
  165.             Unfortunately, this program cannot be executed directly by
  166.         BASIC.  We need to convert this program into one with everyday
  167.         BASIC statements in it before we can run it.  This is what
  168.         RASCAL.EXE does.  To build a BASIC program out of LC.RAS, we
  169.         enter:
  170.  
  171.                  A>rascal lc.ras lc.bas
  172.  
  173.         and these messages appear:
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.                                                                          Page 3        111483105         Rascal Preprocessor User's Manual
  182.  
  183.  
  184.  
  185.                  Rascal BASIC preprocessor, version 1.05
  186.                  (C) Copyright 1983 Marty Franz
  187.  
  188.                  60KB to spare
  189.                  Done with pass 2, 0 error(s) found.
  190.                  22 lines processed,  147 lines/minute.
  191.  
  192.                  A>
  193.  
  194.             After the RASCAL.EXE is done, if we then type the output
  195.         file, LC.BAS, we see:
  196.  
  197.             A>type lc.bas
  198.  
  199.              10  'LC.RAS  10-14-83   5:48a  22 lines
  200.              20  GOSUB 50
  201.              30  END
  202.              40  'Sample Rascal program to count the lines in an ASCII
  203.                  file
  204.              50  'PROCEDURE MAIN
  205.              60  ON ERROR GOTO 150
  206.              70  INPUT "File Name"; FILE.NAME$
  207.              80  OPEN FILE.NAME$ FOR INPUT AS #1
  208.              90  LINE.COUNT = 0 : DONE.SW = 0
  209.             100  LINE INPUT #1, L$
  210.             110  LINE.COUNT = LINE.COUNT+1
  211.             120  IF NOT(DONE.SW = 1) THEN 100
  212.             130  PRINT "There are";LINE.COUNT-1;"lines in ";FILE.NAME$
  213.             140  RETURN
  214.             150  'CHECK.FOR.EOF|
  215.             160  ERROR.CODE = ERR : ERROR.LINE = ERL
  216.             170  IF NOT(ERROR.CODE = 62) THEN 210
  217.             180  DONE.SW = 1
  218.             190  RESUME NEXT
  219.             200  GOTO 230
  220.             210  PRINT "BASIC error ";ERROR.CODE;"at";ERROR.LINE
  221.             220  STOP 'Immediately halt program
  222.             230  END
  223.  
  224.             A>
  225.  
  226.         This is a conventional BASIC program that can now be run using        ____
  227.         BASIC or BASICA.
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.                                                                          Page 4        111483105         Rascal Preprocessor User's Manual
  242.  
  243.  
  244.  
  245.             To summarize our example, which demonstrated the process of
  246.         creating a Rascal program:
  247.  
  248.             1. We first use a text editor to write the program. The
  249.                program contains special Rascal statements (which we'll
  250.                cover soon), is free of line numbers, has lots of blank
  251.                lines and indenting, and is easier to read and maintain
  252.                than regular BASIC.
  253.  
  254.             2. We then use the Rascal preprocessor program, RASCAL.EXE,
  255.                to translate the Rascal program into one with everyday
  256.                BASIC statements in it.
  257.  
  258.             3. The translated BASIC program is now run and debugged as
  259.                usual from BASIC.
  260.  
  261.  
  262.  
  263.         PROGRAM REQUIREMENTS        PROGRAM REQUIREMENTS
  264.  
  265.             To preprocess Rascal programs, you need an IBM PC or XT
  266.         with:
  267.  
  268.             - at least 64KB of memory,
  269.  
  270.             - at least one single-sided diskette drive,
  271.  
  272.             - a color or monochrome adapter, with a monitor capable of
  273.               displaying 80-character lines.
  274.  
  275.             - MS DOS version 1.1 or 2.0, and
  276.  
  277.             - BASIC.COM or BASICA.COM
  278.  
  279.         You also need the files:
  280.  
  281.                  RASCAL.EXE
  282.                  RAS.BAT
  283.  
  284.         available on the diskette with BASIC or BASICA.
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.                                                                          Page 5        111483105         Rascal Preprocessor User's Manual
  302.  
  303.  
  304.  
  305.         THE RAS.BAT FILE        THE RAS.BAT FILE
  306.  
  307.             The file RAS.BAT has been included to make processing Rascal
  308.         source files easier.  Instead of using RASCAL.EXE and completely
  309.         specifying the input and output file names, RAS.BAT gives you a
  310.         command called RAS that assumes a .RAS extension on the Rascal
  311.         program's filename and a .BAS extension on the output BASIC
  312.         filename.  The format of the RAS command is simply:
  313.  
  314.                  A>ras {filename}
  315.  
  316.         The word "filename" in { }s means you have to supply your
  317.         filename (without specifying the extension) for the command to
  318.         work properly.  To preprocess the file LC.RAS, for example, we'd
  319.         use:
  320.  
  321.                  A>ras lc
  322.  
  323.         Now that we've covered how to preprocess Rascal programs, let's
  324.         delve into how to write them.
  325.  
  326.  
  327.  
  328.         RASCAL STATEMENTS        RASCAL STATEMENTS
  329.  
  330.             Your Rascal source program is composed of Rascal statements.
  331.         A Rascal statement is  similar to a BASIC statement, except the
  332.         line number is missing: Rascal supplies this for you when it
  333.         builds the BASIC program from your Rascal program.  If
  334.  
  335.                  10 PRINT "Hello, world"
  336.  
  337.         is a BASIC statement, then
  338.  
  339.                  PRINT "Hello, world"
  340.  
  341.         is the matching Rascal statement.  Only the line number is
  342.         missing.  You can have any number of blanks and tab characters
  343.         in your Rascal statements.  In fact, this is encouraged since
  344.         this helps make your Rascal programs easier to read.
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.                                                                          Page 6        111483105         Rascal Preprocessor User's Manual
  362.  
  363.  
  364.  
  365.  
  366.         LABELS        LABELS
  367.  
  368.             Without line numbers in front of statements, you need another
  369.         way to mark the places in a program where control is to go during
  370.         its execution.  You can do this in Rascal with alphanumeric
  371.         labels instead of line numbers. In a BASIC program, we might
  372.         write two statements as:
  373.  
  374.                  960 GOTO 1030
  375.  
  376.         and
  377.  
  378.                  1030 STOP 'End the program
  379.  
  380.         In Rascal, these two statements would be written instead as:
  381.  
  382.                  GOTO THE.END
  383.  
  384.         and
  385.  
  386.                  THE.END| STOP
  387.  
  388.             Labels can be from 1 to 32 characters in length.  Only the
  389.         characters 0-9, A-Z, a-z, and "." (period) can be in a label.
  390.         This is to keep labels from conflicting from other BASIC
  391.         keywords.  The "|" (vertical bar) is used only where the label is
  392.         defined; notice that it's not there in the GOTO statement.  It's
  393.         used to set the label off from the rest of the line.
  394.  
  395.             Another example of labels in a Rascal program is in LC.RAS.
  396.         The statements:
  397.  
  398.                  ON ERROR GOTO CHECK.FOR.EOF
  399.  
  400.         and
  401.  
  402.                  CHECK.FOR.EOF|
  403.  
  404.         also demonstrate how labels are referenced (the ON GOTO
  405.         statement) and defined (the CHECK.FOR.EOF| statement) in Rascal.
  406.  
  407.         The Rascal statements that can use labels are:
  408.  
  409.                  ON ERROR GOTO {label}
  410.                  ON n GOTO {label1},{label2},...
  411.                  RESTORE {label}
  412.                  RESUME {label}
  413.                  RETURN {label}
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.                                                                          Page 7        111483105         Rascal Preprocessor User's Manual
  422.  
  423.  
  424.  
  425.         PROCEDURES        PROCEDURES
  426.  
  427.             Rascal provides procedures to help organize your programs.
  428.         Procedures are similar to BASIC subroutines, except they are
  429.         identified by and called with an alphanumeric name. Procedures in
  430.         Rascal look like this:
  431.  
  432.                  PROCEDURE {procname}                 ____
  433.                       statements making up the procedure
  434.                  ENDPROC                 ____
  435.  
  436.         (You don't have to spell out the word PROCEDURE; PROC will do, as
  437.         will ENDP for ENDPROC.  In this manual, the underlines show which
  438.         part is required.)  To GOSUB to a procedure you can use either:
  439.  
  440.                  GOSUB {procname}                 ____
  441.  
  442.         or
  443.  
  444.                  DO {procname}                 __
  445.  
  446.         with the rules for procedure names being the same as for label
  447.         names.
  448.  
  449.         The other Rascal statements that can call procedures are:
  450.  
  451.                  ON n DO {procname1},{procname2},...
  452.                  ON COM(n) DO {procname}
  453.                  ON KEY(n) DO {procname}
  454.                  ON PEN DO {name}
  455.                  ON PLAY(n) DO {procname}
  456.                  ON STRIG(n) DO {procname}
  457.                  ON TIMER(n) DO {procname}
  458.  
  459.             Every Rascal program requires at least one procedure, called
  460.         MAIN.  Control is always given to MAIN with a GOSUB when the
  461.         program is started (see lines 10-50 of LC.BAS).  So, our "Hello,
  462.         world" example needs three statements to work properly:
  463.  
  464.                  PROCEDURE MAIN
  465.                       PRINT "Hello, world"
  466.                  ENDPROC
  467.  
  468.             Like white space, you should liberally use procedures in your
  469.         Rascal programs.  They help break your program into mind-size
  470.         chunks for better organization.  Even a single statement deserves
  471.         its own procedure if doing so will make the program easier to
  472.         read.
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.                                                                          Page 8        111483105         Rascal Preprocessor User's Manual
  482.  
  483.  
  484.  
  485.         IF BLOCKS        IF BLOCKS
  486.  
  487.             The only place in your Rascal programs where you can't freely
  488.         use a label to stand for a line number is in an IF statement.
  489.         Instead, a special form of IF is used in Rascal, called an "IF
  490.         block".  It looks like this:
  491.  
  492.                  IF {condition}                 __
  493.                       statements executed if {condition} is true
  494.                  ELSE                 ____
  495.                       statements executed if {condition} is false
  496.                  ENDIF                 ____
  497.  
  498.         An example of an IF block is in LC.RAS:
  499.  
  500.                  IF ERROR.CODE = 62
  501.                       DONE.SW = 1
  502.                       RESUME NEXT
  503.                  ELSE
  504.                       PRINT "BASIC error ";ERROR.CODE;"at";ERROR.LINE
  505.                       STOP 'Immediately halt program
  506.                  ENDIF
  507.  
  508.         Briefly, IF the variable ERROR.CODE has the value 62 then the
  509.         statements DONE.SW = 1 and RESUME NEXT will be executed.  This
  510.         will occur if we have reached the end of the file we are reading.
  511.         If ERROR.CODE is not 62, then another, more sinister BASIC error
  512.         has occurred that we don't know how to handle.  The statements
  513.         after the ELSE display the error code and line number and stop
  514.         the program.
  515.  
  516.             Why should you use IF blocks in a Rascal program instead of
  517.         BASIC's IF {condition} THEN {line number} statement?  Because the
  518.         IF block gives you the advantage of always knowing exactly where
  519.         control begins and ends: with no GOTO statements in the IF and
  520.         ELSE parts of the block, execution beginning at the IF statement
  521.         will always resume after the ENDIF statement, regardless of what
  522.         happens in between.  With BASIC's IF statement, you can picture
  523.         control splitting into two separate paths with each THEN.  Pretty
  524.         soon, as patches and revisions are made, your program becomes a
  525.         mess of "spaghetti code".
  526.  
  527.             If you faithfully use the IF block for your program's logic
  528.         you should seldom find the need for a GOTO statement.  GOTOs
  529.         should be saved only for unusual conditions that require special
  530.         processing, such as errors.
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.                                                                          Page 9        111483105         Rascal Preprocessor User's Manual
  542.  
  543.  
  544.  
  545.         REPEAT AND WHILE BLOCKS        REPEAT AND WHILE BLOCKS
  546.  
  547.             Right now, many of your program loops in BASIC are written
  548.         using IFs and GOTOs.  To help make these more structured, Rascal
  549.         provides a REPEAT block for executing a group of statements over
  550.         and over until a terminating condition is reached.  It looks like
  551.         this:
  552.  
  553.                  REPEAT                 ____
  554.                       statements to keep repeating
  555.                  UNTIL {condition}                 ____
  556.  
  557.         A REPEAT block is used in LC.RAS:
  558.  
  559.                  REPEAT
  560.                       LINE INPUT #1, L$
  561.                       LINE.COUNT = LINE.COUNT+1
  562.                  UNTIL DONE.SW = 1
  563.  
  564.         Remember that REPEAT is like any loop you might make with GOTOs
  565.         in BASIC: you need to change something at some point in the
  566.         statements you're repeating to stop the loop or you'll continue
  567.         forever.
  568.  
  569.             Besides meeting the condition for termination, you can use a
  570.         BREAK statement in the REPEAT block to transfer control
  571.         immediately outside the loop.  To use a BREAK statement, simply
  572.         specify
  573.  
  574.                  BREAK                 ____
  575.  
  576.             Besides REPEAT, Rascal provides a WHILE loop similar to the
  577.         one already in Microsoft BASIC:
  578.  
  579.                  WHILE {condition}                 ____
  580.                       statements to repeat while {condition} is true
  581.                  ENDWHILE                 ____
  582.  
  583.             When using the WHILE block, remember that the {condition} is
  584.         tested before the statements in the body of the loop are ever
  585.         executed, so it's possible to not do them at all.  Also, be sure
  586.         you use ENDWHILE instead of WEND in Rascal, or RASCAL.EXE will
  587.         give you an error message.  When the BASIC program is generated,
  588.         a WHILE block will not have any Microsoft WHILE statements in
  589.         it.  Instead, IFs and GOTOs are used to make the loop, so the
  590.         program can be converted to computers that don't have as advanced
  591.         a version of BASIC.
  592.  
  593.         You can also use BREAK to get out of a WHILE loop.
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.                                                                         Page 10        111483105         Rascal Preprocessor User's Manual
  602.  
  603.  
  604.  
  605.         INCLUDE FILES        INCLUDE FILES
  606.  
  607.             A useful technique in programming is designing a program as a
  608.         set of small, independent modules.  This makes programs easier to
  609.         change, since revisions (like a changing the layout of a file)
  610.         only affect a small component (the subroutines that read or write
  611.         the file).  Modular programming is hard to do with BASIC because
  612.         all the pieces of your program must be present in a single file,
  613.         with one set of line numbers.  To help you develop your programs
  614.         as small modules, Rascal has an INCLUDE statement.  Before
  615.         telling you what it does, here's what it looks like:
  616.  
  617.                  INCLUDE {filename.ext}
  618.  
  619.             INCLUDE is used to bring statements into a program from a
  620.         completely separate file during preprocessing, to be part of the
  621.         program when it's translated into BASIC.  The statements in the
  622.         "included" file are also Rascal statements.  They can define and
  623.         reference labels, procedures, and blocks exactly as if they were
  624.         in the original source file.  In fact, the INCLUDEd file can
  625.         itself have INCLUDE statements in it.
  626.  
  627.             INCLUDE is an extremely useful feature of Rascal, because now
  628.         you can write frequently-used pieces of programs, such as input
  629.         routines and screen formatters, once as sets of Rascal procedures
  630.         and just INCLUDE them into each new program that you write.  When
  631.         you edit these new programs you don't have to manually APPEND the
  632.         pieces, since RASCAL.EXE will automatically take care of the line
  633.         numbering for you.  (But not the variables.)
  634.  
  635.  
  636.  
  637.         MULTIPLE STATEMENTS        MULTIPLE STATEMENTS
  638.  
  639.             In BASIC programs, you can write several statements on a
  640.         single line by separating them with the {:} character.  Since
  641.         RASCAL.EXE creates a BASIC program from the statements you give
  642.         it, the {:} character will work just as it does in BASIC, but
  643.         with an important exception: the special Rascal statements
  644.         mentioned here cannot be used in multiple lines.  Instead, they                       ______
  645.         must have their own line whenever you use them.  This restriction
  646.         may change in another version of RASCAL.EXE.
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.                                                                         Page 11        111483105         Rascal Preprocessor User's Manual
  662.  
  663.  
  664.  
  665.         ERROR MESSAGES        ERROR MESSAGES
  666.  
  667.             When RASCAL.EXE processes your program, it makes two sweeps
  668.         or "passes" across it.  The first pass checks for errors.  There
  669.         aren't very many that you can make, since most of your program
  670.         will be passed through, untouched except for the addition of line
  671.         numbers, to BASIC.  There are, however, a few ways to produce an
  672.         error message.  The possible messages that you can get are listed
  673.         below, along with an explanation of how to fix the statement that
  674.         caused them.  All of these messages will begin with the name of
  675.         the file being processed (since the error might be in an INCLUDEd
  676.         file) and the offending line number.
  677.  
  678.  
  679.         label {name} defined previously at {file} line {n}
  680.  
  681.             If this error message is displayed it means you have defined
  682.             the label {name} twice (or more...) in your program.  A good
  683.             candidate for the source of this problem is an INCLUDEd file
  684.             with a duplicate of a label you are using in your program.
  685.  
  686.  
  687.         label {name} referenced at {file} line {n} undefined
  688.  
  689.             This error message is saying that you have forgotten to
  690.             define the label {name} in your program.  Possible causes of
  691.             this are forgetting an INCLUDE file (especially likely if you
  692.             see a lot of these messages) or misspelling the label.
  693.  
  694.  
  695.         label {name} type mismatch with {file} line {n}
  696.  
  697.             This error message is displayed when you try to GOTO a
  698.             procedure name or DO a LABEL|.
  699.  
  700.  
  701.         {type} block not active
  702.  
  703.             You used an ENDIF, ENDWHILE, or UNTIL statement in your
  704.             program without first using IF, WHILE, or REPEAT.
  705.  
  706.  
  707.         {type} block already begun at {file} line {n}
  708.  
  709.             You tried to put two ELSE statements in one IF block.  You
  710.             have probably forgotten an IF statement somewhere.
  711.  
  712.  
  713.         procedure {name} already begun at {file} line {n}
  714.  
  715.             You cannot have two procedures started at the same time.  You
  716.             must end the first procedure, {name}, with an ENDPROC
  717.             statement before you can begin your new procedure.
  718.  
  719.  
  720.  
  721.                                                                         Page 12        111483105         Rascal Preprocessor User's Manual
  722.  
  723.  
  724.  
  725.         procedure not begun first
  726.  
  727.             This error message means that an ENDPROC statement was found
  728.             in your program when no PROCEDURE statement was active.
  729.  
  730.  
  731.         no WHILE or REPEAT for BREAK
  732.  
  733.             This error message is displayed when you use a BREAK
  734.             statement outside a WHILE or REPEAT blocks.  Remember that a
  735.             BREAK transfers control to the statement immediately after
  736.             the nearest ENDWHILE or UNTIL.
  737.  
  738.  
  739.  
  740.         RASCAL.EXE ABORTS        RASCAL.EXE ABORTS
  741.  
  742.             If you specify a source or object filename that can't be read
  743.         or written to for some reason (such as the name being misspelled,
  744.         the diskette having its write-protect notch covered, etc.) the
  745.         preprocessor program will print the message:
  746.  
  747.                  ABORT- can't open file {filename.ext}
  748.  
  749.         If this happens, you should check to make sure that the source
  750.         file can be read, that any INCLUDEd files it uses can be read,
  751.         and that the object file can be written to.
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.                                                                         Page 13        111483105         Rascal Preprocessor User's Manual
  782.  
  783.  
  784.  
  785.         PREPROCESSOR SPEED        PREPROCESSOR SPEED
  786.  
  787.             This version of RASCAL.EXE can process your programs at the
  788.         rate of 120-300 lines per minute.  As you can see, this rate is
  789.         highly variable and is based on a number of factors, such as the
  790.         speed of your disk drives, the version of MS DOS you are using,
  791.         even the location of the files on the diskette.  If you have
  792.         frequently-used INCLUDE files you might want to consider putting
  793.         them on a RAM disk if you aren't going to change them often. This
  794.         should improve processing time a lot.
  795.  
  796.  
  797.  
  798.         RASCAL VS. BASIC        RASCAL VS. BASIC
  799.  
  800.             Once you've mastered the Rascal statements, there aren't many
  801.         reasons to continue entering and debugging BASIC programs the old
  802.         way.  You'll probably find that with a little practice Rascal
  803.         programs really are easier to write and maintain.  The only
  804.         reasons to modify the translated BASIC programs directly are:
  805.  
  806.             1.  Quick "patches" or minor changes to the BASIC program
  807.                 when the Rascal source code isn't available or there
  808.                 isn't time to edit it again. (Such as when you're at the
  809.                 customer's office and the payroll program isn't
  810.                 working.)
  811.  
  812.             2.  "Fine tuning" for better performance, to straighten out
  813.                 Rascal's "inside out" IF statements and extra GOTOs in
  814.                 programs where speed and memory size are crucial.
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.                                                                         Page 14        111483105         Rascal Preprocessor User's Manual
  842.  
  843.  
  844.  
  845.         STATEMENT REFERENCE        STATEMENT REFERENCE
  846.  
  847.             Here's a list of all the special statements available to you
  848.         in this version of RASCAL.EXE.  For a complete description of how
  849.         to use them, see the individual sections in this manual.
  850.  
  851.                  BREAK
  852.  
  853.                  DO {procname}
  854.  
  855.                  ELSE
  856.  
  857.                  ENDIF
  858.  
  859.                  ENDPROC
  860.  
  861.                  ENDWHILE
  862.  
  863.                  IF {condition}
  864.  
  865.                  GOSUB {procname}
  866.  
  867.                  GOTO {label}
  868.  
  869.                  INCLUDE {d:filename.ext}
  870.  
  871.                  ON n DO {procname1},{procname2},...
  872.                  ON COM(n) DO {procname}
  873.                  ON KEY(n) DO {procname}
  874.                  ON PEN DO {name}
  875.                  ON PLAY(n) DO {procname}
  876.                  ON STRIG(n) DO {procname}
  877.                  ON TIMER(n) DO {procname}
  878.  
  879.                  ON n GOTO {label1},{label2},...
  880.                  ON ERROR GOTO {label}
  881.  
  882.                  REPEAT
  883.  
  884.                  RESTORE {label}
  885.  
  886.                  RESUME {label}
  887.  
  888.                  RETURN {label}
  889.  
  890.                  UNTIL {condition}
  891.  
  892.                  WHILE {condition}
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.                                                                         Page 15        111483105